const getAuthData = require("./login");
const { util, ParamErr, BaseErr } = require("utils");
const {
    Type_Wx_Mini,
    Type_Wx_Web,
    Type_Qw_Mini,
    Type_Qw_Web,
    Type_DingDing_Web,
} = require("./constEnum.js");
// 参数丢失
function errorKey(key) {
    let err = new ParamErr(key);
    return [util.resErr(err), null];
}
// 检查类型
function checkType(type) {
    let allTypes = [Type_Wx_Mini, Type_Wx_Web, Type_Qw_Mini, Type_Qw_Web, Type_DingDing_Web];
    if (allTypes.indexOf(type) >= 0) {
        return [null, true];
    }
    let err = new BaseErr(-5000, `仅支持${allTypes.join("、")}这些类型`);
    return [err, false];
}

// 检查参数
function checkParam(appId, appSecret, code) {
    if (typeof appId !== "string" || util.emptyValue(appId)) {
        return errorKey("appId");
    }
    if (typeof appSecret !== "string" || util.emptyValue(appSecret)) {
        return errorKey("appSecret");
    }
    if (typeof code !== "string" || util.emptyValue(code)) {
        return errorKey("code");
    }
    return [null, true];
}

module.exports = async function (type, appId, appSecret, code) {
    // 类型检查
    let [type_err, type_re] = checkType(type);
    if (!util.nilValue(type_err)) {
        return [type_err, null];
    }
    // 其他参数检查
    let [param_err, _] = checkParam(appId, appSecret, code);
    if (!util.nilValue(param_err)) {
        return [param_err, null];
    }
    // 获取 登录数据
    return await getAuthData(type, appId, appSecret, code);
};
